unit aziende_frm;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics,
  Dialogs, ExtCtrls, StdCtrls, ZDataset;

type

  { TAziende }

  TAziende = class(TForm)
    btelimina: TButton;
    btnuovo: TButton;
    btsalva: TButton;
    cbAziende: TComboBox;
    edCap: TLabeledEdit;
    edCell: TLabeledEdit;
    edcitta: TLabeledEdit;
    edcivico: TLabeledEdit;
    edFax: TLabeledEdit;
    edNazione: TLabeledEdit;
    ednome: TLabeledEdit;
    edProvincia: TLabeledEdit;
    edTelefono: TLabeledEdit;
    edvia: TLabeledEdit;
    edPiva: TLabeledEdit;
    edCF: TLabeledEdit;
    Label1: TLabel;
    lblNote: TLabel;
    mmNote: TMemo;
    zq_aziende: TZQuery;
    procedure bteliminaClick(Sender: TObject);
    procedure btnuovoClick(Sender: TObject);
    procedure btsalvaClick(Sender: TObject);
    procedure cbAziendeChange(Sender: TObject);
    procedure cbAziendeExit(Sender: TObject);
    procedure cbAziendeKeyPress(Sender: TObject; var Key: char);
    procedure ednomeChange(Sender: TObject);
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure LoadComboAziende();
    procedure ClearCampi();
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Aziende: TAziende;

implementation

{ TAziende }
procedure TAziende.FormCreate(Sender: TObject);
begin
  //seleziono tutte le aziende e popolo le combobox
  LoadComboAziende();
end;

procedure TAziende.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  CloseAction:=caFree;
end;


procedure TAziende.btnuovoClick(Sender: TObject);
begin
  //pulisce tutti i campi per consentire un nuovo inserimento
  ClearCampi();
  ednome.SetFocus;
end;

procedure TAziende.btsalvaClick(Sender: TObject);
begin
  //salvo l'azienda controllo partita iva o cf

  //controllo che i parametri obbligatori (denominazione) siano inseriti sia
  //per la modifica che per l'inserimento
  if ednome.Text='' then
  begin
       ShowMessage('Devi indicare la denominazione dell''azienda.');
       ednome.SetFocus ;
       Exit();
  end;
  if cbAziende.Text<>'' then
     begin
     ////////////////////////////////////////////////////////////////////
     ///              MODIFICA AZIENDA
     ////////////////////////////////////////////////////////////////////
     //Se è stato selezionato un'azienda dalla combo procedi con la modifica
     with zq_aziende do
     begin
          Close;
          sql.Clear;
          sql.Add('UPDATE ANAGAZIENDE SET '+
          'NOME=:NOME,'+
          'SEDE_VIA=:VIA,'+
          'SEDE_CIVICO=:CIVICO,'+
          'SEDE_CITTA=:CITTA,'+
          'SEDE_PROVINCIA=:PROVINCIA,'+
          'SEDE_NAZIONE=:NAZIONE,'+
          'SEDE_CAP=:CAP,'+
          'TEL=:TEL,'+
          'CELL=:CELL,'+
          'FAX=:FAX,'+
          'PIVA=:PIVA,'+
          'CF=:CF,'+
          'NOTE=:NOTE '+
          'WHERE IDAZIENDA=:ID');
          ParamByName('ID').AsInteger:=integer(cbAziende.Items.Objects[cbAziende.ItemIndex]);
          ParamByName('NOME').AsString:=ednome.Text;
          ParamByName('VIA').AsString:=edvia.Text;
          ParamByName('CIVICO').AsString:=edcivico.Text;
          ParamByName('CITTA').AsString:=edcitta.Text;
          ParamByName('PROVINCIA').AsString:=edProvincia.Text;
          ParamByName('NAZIONE').AsString:=edNazione.Text;
          ParamByName('CAP').AsString:=edCap.Text;
          ParamByName('TEL').AsString:=edTelefono.Text;
          ParamByName('CELL').AsString:=edCell.Text;
          ParamByName('FAX').AsString:=edFax.Text;
          ParamByName('PIVA').AsString:=edPiva.Text;
          ParamByName('CF').AsString:=edCF.Text;
          ParamByName('NOTE').AsString:=mmNote.Text;
          ExecSQL;
          //riaggiorna la lista delle aziende nelle combo
          LoadComboAziende();
          //comunica l'esito positivo della modifica
          ShowMessage(edNome.Text+ ' è stato modificato correttamente.');
     end
     end
     else
     begin
     ////////////////////////////////////////////////////////////////////
     ///              INSERIMENTO AZIENDA
     ////////////////////////////////////////////////////////////////////
     //inserisci la nuova azienda nel DB
     with zq_aziende do
     begin
          Close;
          sql.Clear;
          sql.Add('INSERT INTO ANAGAZIENDE ('+
          'NOME,'+
          'SEDE_VIA,'+
          'SEDE_CIVICO,'+
          'SEDE_CITTA,'+
          'SEDE_PROVINCIA,'+
          'SEDE_NAZIONE,'+
          'SEDE_CAP,'+
          'TEL,'+
          'CELL,'+
          'FAX,'+
          'PIVA,'+
          'CF,'+
          'NOTE'+
          ') VALUES (:NOME,:VIA,:CIVICO,:CITTA,:PROVINCIA,:NAZIONE,:CAP,:TEL,:CELL,:FAX,:PIVA,:CF,:NOTE)');
          ParamByName('NOME').AsString:=edNome.Text;
          ParamByName('VIA').AsString:=edvia.Text;
          ParamByName('CIVICO').AsString:=edcivico.Text;
          ParamByName('CITTA').AsString:=edcitta.Text;
          ParamByName('PROVINCIA').AsString:=edProvincia.Text;
          ParamByName('NAZIONE').AsString:=edNazione.Text;
          ParamByName('CAP').AsString:=edCap.Text;
          ParamByName('TEL').AsString:=edTelefono.Text;
          ParamByName('CELL').AsString:=edCell.Text;
          ParamByName('FAX').AsString:=edFax.Text;
          ParamByName('PIVA').AsString:=edPiva.Text;
          ParamByName('CF').AsString:=edCF.Text;
          ParamByName('NOTE').AsString:=mmNote.Text;
          ExecSQL;
          //riaggiorna la lista delle aziende nelle combo
          LoadComboAziende();
          //comunica l'esito positivo dell'inserimento
          ShowMessage(edNome.Text+ ' è stato inserito correttamente.');
          ednome.SetFocus;
     end
     end ;
     btnuovoClick(self);
end;

procedure TAziende.bteliminaClick(Sender: TObject);
var
  buttonSelected : Integer;
begin

   //controllo che sia stata selezionata un azienda sennò avverto
   //che è necessario selezionarne una
   if cbAziende.ItemIndex<>-1 then
   begin
      //chiede conferma e poi cancella il record
      buttonSelected := MessageDlg('Si sta per eliminare '+edNome.Text+' dal database. Continuare?',mtInformation, mbOKCancel, 0);
      if buttonSelected = mrOK     then
      begin
           with zq_aziende do
           begin
                Close;
                sql.Clear;
                sql.Add('DELETE FROM ANAGAZIENDE WHERE IDAZIENDA=:ID');
                ParamByName('ID').AsInteger:=integer(cbAziende.Items.Objects[cbAziende.ItemIndex]);
                ExecSQL;
           end;
           //rilegge tutte le aziende e le carica nelle combo
           LoadComboAziende();
           //pulisce tutti i campi
           ClearCampi();
      end
   end
   else ShowMessage('Per eliminare un''azienda è necessario prima selezionarne una dalla lista.');
end;


procedure TAziende.cbAziendeChange(Sender: TObject);
begin
     //imposto la combo contenente gli ID nella stessa posizione dell'azienda
     //selezionata sulla combo con la lista delle aziende ottenendo automaticamente
     //l'ID dell'azienda
     if cbAziende.ItemIndex <>-1 then
     begin
          //mostro nei campi l'azienda selezionata
          with zq_aziende do
          begin
               Close;
               sql.Clear;
               sql.Add('SELECT * FROM ANAGAZIENDE WHERE IDAZIENDA=:ID');
               ParamByName('ID').AsInteger:=integer(cbAziende.Items.Objects[cbAziende.ItemIndex]);
               ExecSQL;
               Open;
               edNome.Text:=FieldByName('NOME').AsString;
               edPiva.Text:=FieldByName('PIVA').AsString;
               edCF.Text:=FieldByName('CF').AsString;
               edvia.Text:=FieldByName('SEDE_VIA').AsString;
               edcivico.Text:=FieldByName('SEDE_CIVICO').AsString;
               edcitta.Text:=FieldByName('SEDE_CITTA').AsString;
               edProvincia.Text:=FieldByName('SEDE_PROVINCIA').AsString;
               edCap.Text:=FieldByName('SEDE_CAP').AsString;
               edNazione.Text:=FieldByName('SEDE_NAZIONE').AsString;
               edTelefono.Text:=FieldByName('TEL').AsString;
               edCell.Text:=FieldByName('CELL').AsString;
               edFax.Text:=FieldByName('FAX').AsString;
               mmNote.Text:=FieldByName('NOTE').AsString;
          end;
     end;
end;

procedure TAziende.cbAziendeExit(Sender: TObject);
begin
  (sender as TComboBox).ItemIndex := (sender as TComboBox).Items.IndexOfObject(TObject((sender as TComboBox).Items.Objects[(sender as TComboBox).ItemIndex]));
  (sender as TComboBox).OnChange(self);
end;

procedure TAziende.cbAziendeKeyPress(Sender: TObject; var Key: char);
begin
    if key=#13 then
       SelectNext(sender as twincontrol,true,true);
end;


procedure TAziende.ednomeChange(Sender: TObject);
begin
     btsalva.Enabled:=true;
end;


procedure TAziende.ClearCampi();
 begin
  cbAziende.ClearSelection;
  edNome.Clear;
  edPiva.Clear;
  edCF.Clear;
  edvia.Clear;
  edcivico.Clear;
  edcitta.Clear;
  edProvincia.Clear;
  edCap.Clear;
  edNazione.Clear;
  edTelefono.Clear;
  edCell.Clear;
  edFax.Clear;
  mmNote.Clear;
  btsalva.Enabled:=false;
end;


procedure TAziende.LoadComboAziende();
begin
//svuota combo
cbAziende.Clear;
with zq_aziende do
        begin
             Close;
             sql.Clear;
             sql.Add('SELECT IDAZIENDA, NOME FROM ANAGAZIENDE');
             ExecSQL;
             Open;
             while not EOF do
             begin
                  //carico il campo NOME di ogni singolo record nella combo di visualizzazione
                  //di tutte le aziende e parallelamente l'ID nella combo nascosta
                  cbAziende.Items.AddObject(FieldByName('NOME').AsString,TObject(FieldByName('IDAZIENDA').AsInteger));
                  Next;
             end;
        end
end;

initialization
  {$I aziende_frm.lrs}

end.

